МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра АСУ
Звіт
до лабораторної роботи №6
з курсу “Об'єктно орієнтоване програмування”
Варіант 11
Бунь І.П.
Тема Створення анімаційного проекту з допомогою бібліотеки OPENGL
Мета роботи: Вивчення можливостей графічної бібліотеки OpenGL для створення анімаційних проектів.
Порядок роботи:
Ознайомитись з теоретичними відомостями по роботі.
Створити проект Delphi, який реалізує наведений у тексті приклад.
Змінити текст програми так, щоб він відповідав індивідуальному завданню.
Оформити звіт для захисту лабораторної роботи за зразком
назва роботи
мета роботи
порядок роботи
короткі теоретичні відомості
алгоритм розв’язку задачі
тексти відповідних модулів проекту
аналіз отриманих результатів та висновки
Завдання
І.Реалізувати за допомогою функцій бібліотеки OpenGL вивід на екран і перетворення геометричної фігури та її каркасу. Тип фігури та перетворення вибрати згідно з варіантом індивідуального завдання:
II. Створити за допомогою функцій бібліотеки OpenGL тривимірні зображення перших літер Вашого прізвища та імені. Передбачити зміну кольорів літер і розташування спостерігача у часі
11. Конус обертання навколо діагоналі простору XYZ за годинниковою стрілкою
Текст програми:
unit frmMain;
interface
uses
Windows, Messages, Classes, Graphics, Forms, ExtCtrls, Menus, Controls,
SysUtils, Dialogs, OpenGL, ComCtrls;
type
TfrmGL = class(TForm)
Timer: TTimer;
UpDown1: TUpDown;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure UpDown1ChangingEx(Sender: TObject; var AllowChange: Boolean;
NewValue: Smallint; Direction: TUpDownDirection);
private
speed: double;
DC : HDC;
hrc : HGLRC;
Angle : GLfloat;
qObj : gluQuadricObj;
procedure SetDCPixelFormat;
protected
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
end;
var
frmGL: TfrmGL;
implementation
uses DGLUT;
{$R *.DFM}
const
MaterialCyan : Array[0..3] of GLfloat = (0.0, 1.0, 1.0, 1.0);
MaterialMy:Array [0..3] of GLfloat=(1.0,1.0,0.0,0.0);
procedure TfrmGL.WMPaint(var Msg: TWMPaint);
var
ps : TPaintStruct;
begin
BeginPaint(Handle, ps);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glPushMatrix;
glRotatef(Angle, 1.0, 1.0, 1.0); // поворот на угол
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @MaterialCyan);
glutSolidCone(0.5,1.5,50,50);
glPopMatrix;
glPushMatrix;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @MaterialMy);
glRotatef(Angle,0.0,1.0,0.0); // поворот на угол
glutSolidTorus(0.1,2,50,50);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @MaterialCyan);
glTranslatef(-2,0.0,0.0);
glutSolidSphere(0.2,10,10);
glTranslatef(4,0.0,0.0);
glutSolidSphere(0.2,10,10);
glPopMatrix;
glPushmatrix;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @MaterialMy);
glRotatef(Angle,0.0,1.0,0.0); // поворот на угол
glRotatef(Angle,1.0,0.0,0.0); // поворот на угол
glutSolidTorus(0.08,1.8,50,50);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @MaterialCyan);
glTranslatef(0.0,1.8,0.0);
glutSolidSphere(0.16,10,10);
glTranslatef(0.0,-3.6,0.0);
glutSolidSphere(0.16,10,10);
glPopMatrix;
glPushMatrix;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @MaterialMy);
glRotatef(Angle,0.0,1.0,0.0); // поворот на угол
glRotatef(Angle,1.0,0.0,0.0); // поворот на угол
glRotatef(Angle,0.0,1.0,0.0);
glutSolidTorus(0.06,1.65,50,50);
glPopMatrix;
SwapBuffers(DC); // конец работы
EndPaint(Handle, ps);
end;
//======================================...